package controller;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.annotation.PostConstruct;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;

import pojo.Loaisanpham;
import pojo.Nhasanxuat;
import util.MessageNotificationHepler;
import util.SearchVisitor;
import dao.LoaisanphamDAO;
import dao.NhasanxuatDAO;
import dao.NhomsanphamDAO;

@ManagedBean(name = "quanLyNhaSanXuatBean")
@ViewScoped
public class QuanLyNhaSanXuat implements Serializable {

	private static final long serialVersionUID = 1L;
	private List<Nhasanxuat> lstNhaSanXuat;
	private int maNhaSanXuat;
	private String tenNhaSanXuat;
	private String diaChi;
	private String website;
	private String soDienThoai;

	private String chuoiTimKiem;

	@PostConstruct
	public void init() {
		setLstNhaSanXuat(new ArrayList<Nhasanxuat>());
	}

	public void LietKeToanBo() {
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		setLstNhaSanXuat(nsxdao.getList());
		System.out.println("Nha SX Xong " + getLstNhaSanXuat().size());
	}

	public void XoaThongTinDangLuuTru() {
		setTenNhaSanXuat(null);
		setMaNhaSanXuat(-1);
		setDiaChi(null);
		setWebsite(null);
		setSoDienThoai(null);
		System.out.println("Xóa thông tin !");
	}

	public void LayThongTinNhaSanXuat(int maNSX) {
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		Nhasanxuat nsx = nsxdao.get(maNSX);
		setMaNhaSanXuat(maNSX);
		setTenNhaSanXuat(nsx.getTennhansanxuat());
		setDiaChi(nsx.getDiachi());
		setWebsite(nsx.getWebsite());
		setSoDienThoai(nsx.getSodienthoai());
		System.out.println("Lấy thông tin  " + getTenNhaSanXuat());

	}

	public void ThemNhaSanXuat(/* String tenLoaiSanPham, int maNhomSanPham */) {
		System.out.println("Thêm " + getTenNhaSanXuat());
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		Nhasanxuat nsx = new Nhasanxuat();
		nsx.setTennhansanxuat(tenNhaSanXuat);
		nsx.setDiachi(diaChi);
		nsx.setWebsite(website);
		nsx.setSodienthoai(soDienThoai);

		try {
			nsxdao.saveOrUpdate(nsx);
		} catch (Exception ex) {
			MessageNotificationHepler
					.ShowMessage("Có Lỗi trong việc thực hiện thao tác!");

			return;
		}
		XoaThongTinDangLuuTru();

		lstNhaSanXuat.add(nsx);
		MessageNotificationHepler.ShowMessage(String.format(
				"Nhà sản xuất '%s' đã được thêm thành công!",
				nsx.getTennhansanxuat()));
	}

	public void SuaNhaSanXuat() {
		System.out.println("Sửa " + getTenNhaSanXuat());
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		Nhasanxuat nsx = nsxdao.get(getMaNhaSanXuat());
		nsx.setTennhansanxuat(tenNhaSanXuat);
		nsx.setDiachi(diaChi);
		nsx.setWebsite(website);
		nsx.setSodienthoai(soDienThoai);
		try {
			nsxdao.saveOrUpdate(nsx);
		} catch (Exception ex) {
			MessageNotificationHepler
					.ShowMessage("Có Lỗi trong việc thực hiện thao tác!");
			return;
		}
		XoaThongTinDangLuuTru();

		MessageNotificationHepler.ShowMessage(String.format(
				"Nhà sản xuất '%s' đã được cập nhật thành công!",
				nsx.getTennhansanxuat()));
	}

	public void Xoa(Nhasanxuat nsx) {
		System.out.println("Xóa: " + nsx.getManhasanxuat());
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		// nsx.setDaxoa(true);
		nsxdao.SetXoaNSXVaSanPhamTuongUng(nsx);
		nsxdao.saveOrUpdate(nsx);

		MessageNotificationHepler.ShowMessage(String.format(
				"Nhà sản xuất '%s' đã được xóa thành công!",
				nsx.getTennhansanxuat()));
	}

	public void HuyXoa(Nhasanxuat nsx) {
		System.out.println("Hủy Xóa: " + nsx.getManhasanxuat());
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		// nsx.setDaxoa(false);
		nsxdao.SetHuyXoaNSXVaSanPhamTuongUng(nsx);
		nsxdao.saveOrUpdate(nsx);
		MessageNotificationHepler.ShowMessage(String.format(
				"Nhà sản xuất '%s' đã được phục hồi thành công!",
				nsx.getTennhansanxuat()));
	}

	/**
	 * @return the tenNhaSanXuat
	 */
	public String getTenNhaSanXuat() {
		return tenNhaSanXuat;
	}

	/**
	 * @param tenNhaSanXuat
	 *            the tenNhaSanXuat to set
	 */
	public void setTenNhaSanXuat(String tenNhaSanXuat) {
		this.tenNhaSanXuat = tenNhaSanXuat;
	}

	/**
	 * @return the lstNhaSanXuat
	 */
	public List<Nhasanxuat> getLstNhaSanXuat() {
		return lstNhaSanXuat;
	}

	/**
	 * @param lstNhaSanXuat
	 *            the lstNhaSanXuat to set
	 */
	public void setLstNhaSanXuat(List<Nhasanxuat> lstNhaSanXuat) {
		this.lstNhaSanXuat = lstNhaSanXuat;
	}

	public void TimKiem() {
		System.out.println("Tim Kiếm: " + chuoiTimKiem);
		NhasanxuatDAO nsxdao = new NhasanxuatDAO();
		SearchVisitor sv = new SearchVisitor();
		nsxdao.accept(sv, chuoiTimKiem);
		lstNhaSanXuat = sv.getResultNhaSanXuat();
		System.out.println("Tim Kiếm KQ: " + lstNhaSanXuat.size());
	}

	public String getChuoiTimKiem() {
		return chuoiTimKiem;
	}

	public void setChuoiTimKiem(String chuoiTimKiem) {
		this.chuoiTimKiem = chuoiTimKiem;
	}

	public String getDiaChi() {
		return diaChi;
	}

	public void setDiaChi(String diaChi) {
		this.diaChi = diaChi;
	}

	public String getWebsite() {
		return website;
	}

	public void setWebsite(String website) {
		this.website = website;
	}

	public String getSoDienThoai() {
		return soDienThoai;
	}

	public void setSoDienThoai(String soDienThoai) {
		this.soDienThoai = soDienThoai;
	}

	public int getMaNhaSanXuat() {
		return maNhaSanXuat;
	}

	public void setMaNhaSanXuat(int maNhaSanXuat) {
		this.maNhaSanXuat = maNhaSanXuat;
	}

}
